-- 原子性地增加熔断器失败计数
-- KEYS[1]: failure_count_key
-- KEYS[2]: last_failure_time_key  
-- KEYS[3]: state_key
-- ARGV[1]: current_time
-- ARGV[2]: failure_threshold
-- ARGV[3]: expire_seconds

local failure_count_key = KEYS[1]
local last_failure_time_key = KEYS[2]
local state_key = KEYS[3]

local current_time = ARGV[1]
local failure_threshold = tonumber(ARGV[2])
local expire_seconds = tonumber(ARGV[3])

-- 增加失败计数
local failure_count = redis.call('INCR', failure_count_key)
redis.call('EXPIRE', failure_count_key, expire_seconds)

-- 设置最后失败时间
redis.call('SET', last_failure_time_key, current_time)
redis.call('EXPIRE', last_failure_time_key, expire_seconds)

-- 检查是否需要打开熔断器
if failure_count >= failure_threshold then
    redis.call('SET', state_key, 'OPEN')
    redis.call('EXPIRE', state_key, expire_seconds)
    return { failure_count, 1 }  -- 返回失败次数和是否打开熔断器的标志
else
    return { failure_count, 0 }
end